<?php

Class ExpensePropertiesController extends AppController {

    public $name = 'ExpenseProperties';

    function edit($id) {
        $this->layout = "ajax";
        $this->ExpenseProperty->recursive = -1;
        $aviso = "";


        App::Import('Model', 'Proyect');
        $proyect_id = $this->ExpenseProperty->field('ExpenseProperty.proyect_id', array('ExpenseProperty.id' => $id));
        $proyecto = new Proyect();
        $codigo = $proyecto->field('Proyect.codigo', array('Proyect.id' => $proyect_id));

        $this->set('codigo', $codigo);

        if (empty($this->data)) {
            $this->data = $this->ExpenseProperty->find('first', array('conditions' => array('ExpenseProperty.id' => $id), 'fields' => array('ExpenseProperty.*')));
        } else {
            date_default_timezone_set("America/Bogota");
            $this->data['ExpenseProperty']['fecha'] = date("Y-m-d-h-i-s");
            $this->data['ExpenseProperty']['user_id'] = $this->Auth->user('id');
            //SE GUARDA EL ARCHIVO ACTA DE ENTREGA PREDIO
            if (stristr($this->data['ExpenseProperty']['archivoActaEntrega']['name'], ".pdf")) {

                //$codigo = $this->Session->read('cod');
                $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo . "/pagos";
                if (!is_dir($rutaArchivo)) {
                    if (!mkdir($rutaArchivo)) {
                        echo "error creando archivo";
                        //redirect
                    }
                }
                $nombreArchivo = "ActaEntrega-$codigo-$id.pdf";
                $rutaArchivo.= "/" . $nombreArchivo;

                if (move_uploaded_file($this->data['ExpenseProperty']['archivoActaEntrega']['tmp_name'], $rutaArchivo)) {
                    $aviso.="<h1>Se ha cargado el archivo acta de entrega predio. </h1> ";
                } else {
                    $aviso.="<h1>Error cargando archivo acta de entrega predio. </h1> ";
                }
                $this->data['ExpenseProperty']['acta_entrega'] = 1;
            }
            //SE GUARDA EL ARCHIVO FOLIO MATRICULA
            if (stristr($this->data['ExpenseProperty']['archivoFolioMatricula']['name'], ".pdf")) {

                //$codigo = $this->Session->read('cod');
                $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo . "/pagos";
                if (!is_dir($rutaArchivo)) {
                    if (!mkdir($rutaArchivo)) {
                        echo "error creando archivo";
                        //redirect
                    }
                }
                $nombreArchivo = "FolioMatricula-$codigo-$id.pdf";
                $rutaArchivo.= "/" . $nombreArchivo;

                if (move_uploaded_file($this->data['ExpenseProperty']['archivoFolioMatricula']['tmp_name'], $rutaArchivo)) {
                    $aviso.="<h1>Se ha cargado el archivo folio matrícula. </h1> ";
                } else {
                    $aviso.="<h1>Error cargando archivo folio matrícula. </h1> ";
                }
                $this->data['ExpenseProperty']['folio_matricula'] = 1;
            }
            //SE GUARDA EL ARCHIVO AUTORIZACION VENDEDOR
            if (stristr($this->data['ExpenseProperty']['archivoAutorizacionVendedor']['name'], ".pdf")) {

                //$codigo = $this->Session->read('cod');
                $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo . "/pagos";
                if (!is_dir($rutaArchivo)) {
                    if (!mkdir($rutaArchivo)) {
                        echo "error creando archivo";
                        //redirect
                    }
                }
                $nombreArchivo = "AutorizacionVendedor-$codigo-$id.pdf";
                $rutaArchivo.= "/" . $nombreArchivo;

                if (move_uploaded_file($this->data['ExpenseProperty']['archivoAutorizacionVendedor']['tmp_name'], $rutaArchivo)) {
                    $aviso.="<h1>Se ha cargado el archivo autorización vendedor. </h1> ";
                } else {
                    $aviso.="<h1>Error cargando archivo autorización vendedor. </h1> ";
                }
                $this->data['ExpenseProperty']['autorizacion_vendedor'] = 1;
            }

            //se envia un correo informando los archivos que se cargaron.
            if ($aviso != "") {
                App::import('Vendor', 'ClassPhpmailer', array('file' => 'phpmailer/class.phpmailer.php'));
                $responsable = $this->ExpenseProperty->User->find('first', array('recursive' => -1, 'conditions' => array('User.id' => $this->Auth->user('id')), 'fields' => array('User.email', 'User.nombre', 'User.primer_apellido')));
                $revisor = $this->ExpenseNotarial->User->find('first', array('recursive' => -1, 'conditions' => array('User.id' => $this->data['ExpenseNotarial']['reviso']), 'fields' => array('User.email', 'User.nombre', 'User.primer_apellido')));
                $body = "<p>Encargado de adjuntar documentos: " . $responsable['User']['nombre'] . " " . $responsable['User']['primer_apellido'] . " " . $responsable['User']['email'] . "</p>";

                $mail = new PHPMailer();

                $mail->IsSMTP();
                $mail->SMTPAuth = true;
                $mail->Host = "ssl://smtp.gmail.com"; // SMTP a utilizar. Por ej. smtp.elserver.com 
                $mail->Username = "sitrural@gmail.com"; // Correo completo a utilizar 
                $mail->Password = "laropavieja.net.co"; // Contraseña 
                $mail->Port = 465; // Puerto a utilizar 
                $mail->From = "sitrural@gmail.com"; // Desde donde enviamos (Para mostrar) 
                $mail->FromName = "Soporte aplicativo tierras";
                $mail->AddAddress($revisor['User']['email']);
                $mail->AddAddress($responsable['User']['email']);
                $mail->AddAddress('mrodriguez@incoder.gov.co');
                $mail->IsHTML(true);
                $mail->Subject = utf8_decode("CARGUE DOCUMENTOS GASTO NOTARIAL PROYECTO $codigoProyecto. " . " "); // Este es el titulo del email. 

                $mail->Body = $body . " $aviso"; // Mensaje a enviar 

                $exito = $mail->Send(); // Envía el correo. 
                if ($exito) {

                    $this->Session->setFlash('Registro creado correctamente', 'flash_custom');
                } else {
                    $this->Session->setFlash("Error :  " . $mail->ErrorInfo) . "XXX";
                    $this->redirect(array('controller' => 'ExpenseNotarials', 'action' => 'index'));
                }
            }


            if ($this->ExpenseProperty->saveAll($this->data)) {
                $this->Session->setFlash('Registro editado correctamente', 'flash_custom');
                $this->redirect(array('controller' => 'ExpenseProperties', 'action' => 'index'));
            } else {
                $this->Session->setFlash('Error editando datos', 'flash_custom');
                $this->redirect(array('controller' => 'ExpenseProperties', 'action' => 'index'));
            }
        }
    }

    function add($proyect_id) {
        App::Import('Model', 'FinalEvaluation');
        $this->layout = "ajax";
        $this->ExpenseProperty->recursive = -1;
        $aviso = "";

        App::Import('Model', 'Proyect');
        $proyecto = new Proyect();
        $codigo = $proyecto->field('Proyect.codigo', array('Proyect.id' => $proyect_id));

        if (empty($this->data)) {
            $this->set('proyect_id', $proyect_id);
        } else {
            $evaluacionFinal = new FinalEvaluation();
            $valorSubsidioPredios = $evaluacionFinal->field('subsidio_predios_real', array('FinalEvaluation.proyect_id' => $proyect_id), 'FinalEvaluation.id DESC');

            //guardo el id de la persona que hizo el ultimo cambio.
            $this->data['ExpenseProperty']['valor'] = $valorSubsidioPredios;
            $this->data['ExpenseProperty']['user_id'] = $this->Auth->user('id');
            date_default_timezone_set("America/Bogota");
            $this->data['ExpenseProperty']['fecha'] = date("Y-m-d-h-i-s");

            if (stristr($this->data['ExpenseProperty']['archivoActaEntrega']['name'], ".pdf")) {
                $this->data['ExpenseProperty']['acta_entrega'] = 1;
            }

            if (stristr($this->data['ExpenseProperty']['archivoFolioMatricula']['name'], ".pdf")) {
                $this->data['ExpenseProperty']['folio_matricula'] = 1;
            }

            if (stristr($this->data['ExpenseProperty']['archivoAutorizacionVendedor']['name'], ".pdf")) {
                $this->data['ExpenseProperty']['autorizacion_vendedor'] = 1;
            }

            if ($this->ExpenseProperty->saveAll($this->data)) {
                $lastId = $this->ExpenseProperty->getInsertID();

                //SE GUARDA EL ARCHIVO ACTA DE ENTREGA PREDIO
                if (stristr($this->data['ExpenseProperty']['archivoActaEntrega']['name'], ".pdf")) {

                    //$codigo = $this->Session->read('cod');
                    $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo . "/pagos";
                    if (!is_dir($rutaArchivo)) {
                        if (!mkdir($rutaArchivo)) {
                            echo "error creando archivo";
                            //redirect
                        }
                    }
                    $nombreArchivo = "ActaEntrega-$codigo-$lastId.pdf";
                    $rutaArchivo.= "/" . $nombreArchivo;

                    if (move_uploaded_file($this->data['ExpenseProperty']['archivoActaEntrega']['tmp_name'], $rutaArchivo)) {
                        $aviso.="<h1>Se ha cargado el archivo acta de entrega predio. </h1> ";
                    } else {
                        $aviso.="<h1>Error cargando archivo acta de entrega predio. </h1> ";
                    }
                }
                //SE GUARDA EL ARCHIVO FOLIO MATRICULA
                if (stristr($this->data['ExpenseProperty']['archivoFolioMatricula']['name'], ".pdf")) {

                    //$codigo = $this->Session->read('cod');
                    $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo . "/pagos";
                    if (!is_dir($rutaArchivo)) {
                        if (!mkdir($rutaArchivo)) {
                            echo "error creando archivo";
                            //redirect
                        }
                    }
                    $nombreArchivo = "FolioMatricula-$codigo-$lastId.pdf";
                    $rutaArchivo.= "/" . $nombreArchivo;

                    if (move_uploaded_file($this->data['ExpenseProperty']['archivoFolioMatricula']['tmp_name'], $rutaArchivo)) {
                        $aviso.="<h1>Se ha cargado el archivo folio matricula. </h1> ";
                    } else {
                        $aviso.="<h1>Error cargando archivo folio matricula. </h1> ";
                    }
                }
                //SE GUARDA EL ARCHIVO AUTORIZACION VENDEDOR
                if (stristr($this->data['ExpenseProperty']['archivoAutorizacionVendedor']['name'], ".pdf")) {

                    //$codigo = $this->Session->read('cod');
                    $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo . "/pagos";
                    if (!is_dir($rutaArchivo)) {
                        if (!mkdir($rutaArchivo)) {
                            echo "error creando archivo";
                            //redirect
                        }
                    }
                    $nombreArchivo = "AutorizacionVendedor-$codigo-$lastId.pdf";
                    $rutaArchivo.= "/" . $nombreArchivo;

                    if (move_uploaded_file($this->data['ExpenseProperty']['archivoAutorizacionVendedor']['tmp_name'], $rutaArchivo)) {
                        $aviso.="<h1>Se ha cargado el archivo autorización vendedor. </h1> ";
                    } else {
                        $aviso.="<h1>Error cargando archivo autorización vendedor. </h1> ";
                    }
                }
                //se envia un correo informando los archivos que se cargaron.
                if ($aviso != "") {
                    App::import('Vendor', 'ClassPhpmailer', array('file' => 'phpmailer/class.phpmailer.php'));
                    $responsable = $this->ExpenseProperty->User->find('first', array('recursive' => -1, 'conditions' => array('User.id' => $this->Auth->user('id')), 'fields' => array('User.email', 'User.nombre', 'User.primer_apellido')));
                    $body = "<p>Encargado de adjuntar documentos: " . $responsable['User']['nombre'] . " " . $responsable['User']['primer_apellido'] . " " . $responsable['User']['email'] . "</p>";

                    $mail = new PHPMailer();

                    $mail->IsSMTP();
                    $mail->SMTPAuth = true;
                    $mail->Host = "ssl://smtp.gmail.com"; // SMTP a utilizar. Por ej. smtp.elserver.com 
                    $mail->Username = "sitrural@gmail.com"; // Correo completo a utilizar 
                    $mail->Password = "laropavieja.net.co"; // Contraseña 
                    $mail->Port = 465; // Puerto a utilizar 
                    $mail->From = "sitrural@gmail.com"; // Desde donde enviamos (Para mostrar) 
                    $mail->FromName = "Soporte aplicativo tierras";
                    $mail->AddAddress($responsable['User']['email']);
                    $mail->AddAddress('mrodriguez@incoder.gov.co');
                    $mail->IsHTML(true);
                    $mail->Subject = utf8_decode("CARGUE DOCUMENTOS GASTO NOTARIAL PROYECTO $codigoProyecto. " . " "); // Este es el titulo del email. 

                    $mail->Body = $body . " $aviso"; // Mensaje a enviar 

                    $exito = $mail->Send(); // Envía el correo. 
                    if ($exito) {

                        $this->Session->setFlash('Registro creado correctamente', 'flash_custom');
                    } else {
                        $this->Session->setFlash("Error :  " . $mail->ErrorInfo) . "XXX";
                        $this->redirect(array('controller' => 'ExpenseNotarials', 'action' => 'index'));
                    }
                }

                $this->Session->setFlash('Registro editado correctamente', 'flash_custom');
                $this->redirect(array('controller' => 'ExpenseProperties', 'action' => 'index'));
            } else {
                $this->Session->setFlash('Error editando datos mierda', 'flash_custom');
                $this->redirect(array('controller' => 'ExpenseProperties', 'action' => 'index'));
            }
        }
    }

    function qualify($id) {
        App::Import('Model', 'BankAccount');
        App::Import('Model', 'Payment');
        App::Import('Model', 'Proyect');

        $this->layout = "ajax";
        $this->ExpenseProperty->recursive = -1;

        $proyect_id = $this->ExpenseProperty->field('ExpenseProperty.proyect_id', array('ExpenseProperty.id' => $id));
        $proyecto = new Proyect();
        $codigo = $proyecto->field('Proyect.codigo', array('Proyect.id' => $proyect_id));
        $this->set('codigo', $codigo);

        if (empty($this->data)) {
            $this->data = $this->ExpenseProperty->find('first', array('conditions' => array('ExpenseProperty.id' => $id), 'fields' => array('ExpenseProperty.*')));
            $cuentas = new BankAccount();
            $cuentas->recursive = -1;
            $sumatoriaCuentas = $cuentas->field('Sum(BankAccount.valor)', array('BankAccount.proyect_id' => $this->data['ExpenseProperty']['proyect_id'], 'BankAccount.tipo_titular' => 'Propietario'));
            $cuentas1 = $cuentas->find('all', array('conditions' => array('BankAccount.proyect_id' => $this->data['ExpenseProperty']['proyect_id'], 'BankAccount.tipo_titular' => 'Propietario'), 'fields' => array('BankAccount.nombre_titular', 'BankAccount.documento_titular', 'BankAccount.adjunto')));
            $this->set('sumatoriaCuentas', $sumatoriaCuentas);
            $this->set('cuentas', $cuentas1);
        } else {
            //El ultimo que modifico es quien califica.
            $this->data['ExpenseProperty']['reviso'] = $this->Auth->user('id');

            if ($this->ExpenseProperty->saveAll($this->data)) {
                if ($this->data['ExpenseProperty']['calificacion_total'] == 'Cumple') {

                    $pago = new Payment();
                    $id_registro = $pago->find('first', array('conditions' => array('Payment.proyect_id' => $this->data['ExpenseProperty']['proyect_id'], 'Payment.tipo' => 'DESEMBOLSO PREDIO'), 'fields' => array('Payment.id')));
                    $valor = $this->data['ExpenseProperty']['valor'];
                    $this->data['Payment']['id'] = $id_registro['Payment']['id'];
                    $this->data['Payment']['monto'] = $valor;
                    $data = array(
                        'Payment' => array(
                            'id' => $id_registro['Payment']['id'],
                            'monto' => $valor
                        )
                    );

                    if ($pago->saveAll($data)) {
                        $this->Session->setFlash('Se actualizó el valor del pago.');
                    } else {
                        $this->Session->setFlash('No se actualizó el valor pago.');
                    }
                    $this->send_mail($id, 0);
                } elseif ($this->data['ExpenseProperty']['calificacion_total'] == 'No cumple') {
                    $this->send_mail($id, 1);
                }

                $this->Session->setFlash('Registro editado correctamente', 'flash_custom');
                $this->redirect(array('controller' => 'ExpenseProperties', 'action' => 'index'));
            } else {
                $this->Session->setFlash('Error editando datos', 'flash_custom');
                $this->redirect(array('controller' => 'ExpenseProperties', 'action' => 'index'));
            }
        }
    }

    function index() {
        $this->layout = "ajax";
        $proyect_id = $this->Session->read('proy_id');
        if ($proyect_id == "") {
            $this->Session->setFlash('Por favor seleccione un proyecto', 'flash_custom');
            $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
        } else {
            $this->ExpenseProperty->recursive = -1;
            $this->set('proyect_id', $proyect_id);
            $this->set('ExpenseProperties', $this->ExpenseProperty->find('all', array('order' => 'ExpenseProperty.id DESC', 'conditions' => array('ExpenseProperty.proyect_id' => $proyect_id), 'fields' => array('ExpenseProperty.*'))));
        }
    }

    function expenses_report() {
        App::Import('Model', 'Resolution');
        App::Import('Model', 'BankAccount');
        App::Import('Model', 'Candidate');
        App::Import('Model', 'User');

        //Muestra los datos de los pagos que tienen la calificación de aprobado por el evaluador
        //menos aquellos que ya tengan fecha de solicitud en la tabla de payments
        $this->layout = 'csv';
        ini_set('max_execution_time', 600); //increase max_execution_time to 10 min if data set is very large
        //create a file
        $csv_file = fopen('php://output', 'w');
        header('Content-type: application/csv');

        $filename = "Reporte_Para_Solicitud_Desembolsos_" . date("Y.m.d") . ".csv";
        header('Content-Disposition: attachment; filename="' . $filename . '"');
        $header_row = array("Código proyecto", "Número resolución", "Fecha resolución", "Tipo desembolso", "Valor desembolso", "Titular de la cuenta", "Documento identidad", "Nombre del banco", "Número de cuenta", "Tipo cuenta", "Quien reviso documentos");

        // Las cabeceras del archivo
        fputcsv($csv_file, $header_row, ';', '"');


        //consulta para tomar los gastos notariales.
        $sql = "SELECT ExpenseNotarial.proyect_id, ExpenseNotarial.id, ExpenseNotarial.reviso, Proyect.codigo, ExpenseNotarial.valor FROM `expense_notarials` ExpenseNotarial
                LEFT JOIN proyects Proyect ON Proyect.id = ExpenseNotarial.proyect_id
                LEFT JOIN payments Payment on Payment.proyect_id =  ExpenseNotarial.proyect_id
                WHERE `calificacion_total` = 'Cumple' and
                Payment.tipo = 'GASTOS NOTARIALES' and
                Payment.fecha_solicitud_desembolso = '0000-00-00'";

        $pagos_notariales = $this->ExpenseProperty->query($sql);

        //consulta para tomar los gastos de predios.
        $sql = "SELECT ExpenseProperty.proyect_id, ExpenseProperty.id, ExpenseProperty.reviso, Proyect.codigo FROM `expense_properties` ExpenseProperty
                LEFT JOIN proyects Proyect ON Proyect.id = ExpenseProperty.proyect_id
                LEFT JOIN payments Payment on Payment.proyect_id =  ExpenseProperty.proyect_id
                WHERE ExpenseProperty.calificacion_total = 'Cumple' and
                Payment.tipo = 'DESEMBOLSO PREDIO' and
                Payment.fecha_solicitud_desembolso = '0000-00-00'";

        $pagos_predios = $this->ExpenseProperty->query($sql);

        //consulta para tomar los gastos de proyecto productivo
        $sql = "SELECT ExpenseNotarial.proyect_id, ProyectCheckList.id, ProyectCheckList.saldo, ProyectCheckList.valor, ProyectCheckList.reviso, Proyect.codigo FROM proyect_check_lists ProyectCheckList
                 LEFT JOIN expense_notarials ExpenseNotarial ON ExpenseNotarial.id = ProyectCheckList.expense_notarial_id
                 LEFT JOIN proyects Proyect ON Proyect.id = ExpenseNotarial.proyect_id
                 LEFT JOIN payments Payment on Payment.proyect_id =  ExpenseNotarial.proyect_id
                 WHERE ProyectCheckList.calificacion_total = 'Cumple' and
                 Payment.tipo = 'PROYECTO PRODUCTIVO' and
                 Payment.fecha_solicitud_desembolso = '0000-00-00'";

        $pagos_proyectos = $this->ExpenseProperty->query($sql);

        $resolution = new Resolution();
        $bankAccount = new BankAccount();
        $candidate = new Candidate();
        $user = new User();

        //utilizo el resultado de los pagos notariales para hallar la ultima resolución
        foreach ($pagos_notariales as $pago_notarial) {
            $ultima_resolucion = $resolution->find('first', array('conditions' => array('Resolution.proyect_id' => $pago_notarial['ExpenseNotarial']['proyect_id']), 'fields' => array('Resolution.numero', 'Resolution.fecha'), 'order' => array('Resolution.id' => 'DESC')));
            //solo se trae la ultima cuenta bancaria, ya que este tipo de pago solo se hace a una persona.
            $bankAccount->recursive = -1;
            $cuenta_bancaria = $bankAccount->find('first', array('conditions' => array('BankAccount.proyect_id' => $pago_notarial['ExpenseNotarial']['proyect_id'], 'BankAccount.tipo_titular' => 'Beneficiario'), 'fields' => array('BankAccount.candidate_id', 'BankAccount.valor', 'BankAccount.nombre_banco', 'BankAccount.numero_cuenta', 'BankAccount.valor', 'BankAccount.tipo_cuenta'), 'order' => array('BankAccount.id' => 'DESC')));
            $candidate->recursive = -1;
            $aspirante = $candidate->find('first', array('conditions' => array('Candidate.id' => $cuenta_bancaria['BankAccount']['candidate_id']), 'fields' => array('Candidate.nro_ident', 'Candidate.1er_apellido', 'Candidate.2do_apellido', 'Candidate.1er_nombre', 'Candidate.2do_nombre')));
            //busco el usuario que reviso el pago. Es aquel que tiene asignado el usuario tipo evaluador desembolso

            $usuario_evaluador = $user->find('first', array('conditions' => array('User.id' => $pago_notarial['ExpenseNotarial']['reviso']), 'fields' => array('User.nombre', 'User.primer_apellido', 'User.segundo_apellido')));

            $row = array(
                $pago_notarial['Proyect']['codigo'],
                $ultima_resolucion['Resolution']['numero'],
                $ultima_resolucion['Resolution']['fecha'],
                "GASTO NOTARIAL",
                number_format($pago_notarial['ExpenseNotarial']['valor'], 2, ',', '.'),
                $aspirante['Candidate']['1er_apellido'] . " " . $aspirante['Candidate']['2do_apellido'] . " " . $aspirante['Candidate']['1er_nombre'] . " " . $aspirante['Candidate']['2do_nombre'],
                $aspirante['Candidate']['nro_ident'],
                $cuenta_bancaria['BankAccount']['nombre_banco'],
                "'" . $cuenta_bancaria['BankAccount']['numero_cuenta'],
                $cuenta_bancaria['BankAccount']['tipo_cuenta'],
                $usuario_evaluador['User']['nombre'] . " " . $usuario_evaluador['User']['primer_apellido'] . " " . $usuario_evaluador['User']['segundo_apellido']
            );
            fputcsv($csv_file, $row, ';', '"');
        }

        foreach ($pagos_predios as $pago_predio) {
            $ultima_resolucion = $resolution->find('first', array('conditions' => array('Resolution.proyect_id' => $pago_predio['ExpenseProperty']['proyect_id']), 'fields' => array('Resolution.numero', 'Resolution.fecha'), 'order' => array('Resolution.id' => 'DESC')));
            //solo se trae la ultima cuenta bancaria, ya que este tipo de pago solo se hace a una persona.
            $bankAccount->recursive = -1;
            $cuentas_bancarias = $bankAccount->find('all', array('conditions' => array('BankAccount.proyect_id' => $pago_predio['ExpenseProperty']['proyect_id'], 'BankAccount.tipo_titular' => 'Propietario'), 'fields' => array('BankAccount.valor', 'BankAccount.nombre_banco', 'BankAccount.numero_cuenta', 'BankAccount.nombre_titular', 'BankAccount.documento_titular'), 'order' => array('BankAccount.id' => 'ASC')));

            //busco el usuario que reviso el pago. Es aquel que tiene asignado el usuario tipo evaluador desembolso
            $usuario_evaluador = $user->find('first', array('conditions' => array('User.id' => $pago_predio['ExpenseProperty']['reviso']), 'fields' => array('User.nombre', 'User.primer_apellido', 'User.segundo_apellido')));

            foreach ($cuentas_bancarias as $cuenta_bancaria) {
                $row = array(
                    $pago_notarial['Proyect']['codigo'],
                    $ultima_resolucion['Resolution']['numero'],
                    $ultima_resolucion['Resolution']['fecha'],
                    "DESEMBOLSO PREDIO",
                    number_format($cuenta_bancaria['BankAccount']['valor'], 2, ',', '.'),
                    $cuenta_bancaria['BankAccount']['nombre_titular'],
                    $cuenta_bancaria['BankAccount']['documento_titular'],
                    $cuenta_bancaria['BankAccount']['nombre_banco'],
                    "'" . $cuenta_bancaria['BankAccount']['numero_cuenta'],
                    $cuenta_bancaria['BankAccount']['tipo_cuenta'],
                    $usuario_evaluador['User']['nombre'] . " " . $usuario_evaluador['User']['primer_apellido'] . " " . $usuario_evaluador['User']['segundo_apellido']
                );
                fputcsv($csv_file, $row, ';', '"');
            }
        }


        foreach ($pagos_proyectos as $pago_proyecto) {
            $ultima_resolucion = $resolution->find('first', array('conditions' => array('Resolution.proyect_id' => $pago_proyecto['ExpenseNotarial']['proyect_id']), 'fields' => array('Resolution.numero', 'Resolution.fecha'), 'order' => array('Resolution.id' => 'DESC')));
            //solo se trae la ultima cuenta bancaria, ya que este tipo de pago solo se hace a una persona.
            $bankAccount->recursive = -1;
            $cuenta_bancaria = $bankAccount->find('first', array('conditions' => array('BankAccount.proyect_id' => $pago_proyecto['ExpenseNotarial']['proyect_id'], 'BankAccount.tipo_titular' => 'Beneficiario'), 'fields' => array('BankAccount.candidate_id', 'BankAccount.valor', 'BankAccount.nombre_banco', 'BankAccount.numero_cuenta', 'BankAccount.valor'), 'order' => array('BankAccount.id' => 'DESC')));
            $candidate->recursive = -1;
            $aspirante = $candidate->find('first', array('conditions' => array('Candidate.id' => $cuenta_bancaria['BankAccount']['candidate_id']), 'fields' => array('Candidate.nro_ident', 'Candidate.1er_apellido', 'Candidate.2do_apellido', 'Candidate.1er_nombre', 'Candidate.2do_nombre')));
            //busco el usuario que reviso el pago. Es aquel que tiene asignado el usuario tipo evaluador desembolso

            $usuario_evaluador = $user->find('first', array('conditions' => array('User.id' => $pago_proyecto['ProyectCheckList']['reviso']), 'fields' => array('User.nombre', 'User.primer_apellido', 'User.segundo_apellido')));

            $row = array(
                $pago_proyecto['Proyect']['codigo'],
                $ultima_resolucion['Resolution']['numero'],
                $ultima_resolucion['Resolution']['fecha'],
                "DESEMBOLSO PROYECTO PRODUCTIVO",
                number_format(($pago_proyecto['ProyectCheckList']['valor'] - $pago_proyecto['ProyectCheckList']['saldo']), 2, ',', '.'),
                $aspirante['Candidate']['1er_apellido'] . " " . $aspirante['Candidate']['2do_apellido'] . " " . $aspirante['Candidate']['1er_nombre'] . " " . $aspirante['Candidate']['2do_nombre'],
                $aspirante['Candidate']['nro_ident'],
                $cuenta_bancaria['BankAccount']['nombre_banco'],
                "'" . $cuenta_bancaria['BankAccount']['numero_cuenta'],
                $cuenta_bancaria['BankAccount']['tipo_cuenta'],
                $usuario_evaluador['User']['nombre'] . " " . $usuario_evaluador['User']['primer_apellido'] . " " . $usuario_evaluador['User']['segundo_apellido']
            );
            fputcsv($csv_file, $row, ';', '"');
        }

        //se imprime el archivo.
        fclose($csv_file);
    }

    function gastos_a_revisar() {
        App::Import('Model', 'ExpenseNotarial');
        App::Import('Model', 'ExpenseProperty');
        App::Import('Model', 'ProyectCheckList');
        App::Import('Model', 'User');
        App::Import('Model', 'Payment');

        //Muestra los datos de los pagos que tienen la calificación de aprobado por el evaluador
        //menos aquellos que ya tengan fecha de solicitud en la tabla de payments
        $this->layout = 'csv'; //csv
        ini_set('max_execution_time', 600); //increase max_execution_time to 10 min if data set is very large
        //create a file
        $csv_file = fopen('php://output', 'w');
        header('Content-type: application/csv');

        $filename = "Reporte_Proyectos_Para_Evaluar_" . date("Y.m.d") . ".csv";
        header('Content-Disposition: attachment; filename="' . $filename . '"');
        $header_row = array(
            "Código proyecto", "Valor gasto notarial", "Archivo acta notificación - gasto notarial",
            "Archivo autorizaciones especiales - gasto notarial", "Archivo anexos - gasto notarial", "Fecha solicitud desembolso - Gastos notariales", "Fecha pago real - Gastos notariales",
            "Valor desembolso de predios", "Archivo acta entrega - desembolso de predios", "Archivo folio matrícula - desembolso de predios", "Archivo autorización especial vendedor - desembolso de predios", "Fecha solicitud desembolso - Predio", "Fecha pago real - Predio",
            "Valor inicial desembolso de proyecto productivo", "Valor saldo de gastos notariales", "Valor real de desembolso proyecto productivo",
            "Informe de solicitud de desembolso del subsidio para proyecto productivo", "Acta de Inicio del Proyecto Productivo", "Liquidación de los Gastos Notariales según Formato", "Fecha solicitud desembolso - Proyecto productivo", "Fecha pago real - Proyecto productivo",);

        // Las cabeceras del archivo
        fputcsv($csv_file, $header_row, ';', '"');

        $expenseNotarial = new ExpenseNotarial();
        $expenseProperty = new ExpenseProperty();
        $proyectCheckList = new ProyectCheckList();
        $pago = new Payment();
        $user = new User();

        $expenseNotarial->recursive = 1;
        $gastos_notariales = $expenseNotarial->find('all', array('fields' => array('ExpenseNotarial.id', 'Proyect.codigo', 'Proyect.id', 'ExpenseNotarial.valor', 'ExpenseNotarial.proyect_id', 'ExpenseNotarial.acta_notificacion', 'ExpenseNotarial.autorizaciones_especiales', 'ExpenseNotarial.anexos', 'ExpenseNotarial.user_id')));
        $expenseProperty->recursive = -1;
        $proyectCheckList->recursive = -1;
        $user->recursive = -1;
        $pago->recursive = -1;

        $acta_notificacion = "NO CARGADO";
        $autorizaciones_especiales = "NO CARGADO";
        $anexos = "NO CARGADO";
        $acta_entrega = "NO CARGADO";
        $folio_matricula = "NO CARGADO";
        $autorizacion_vendedor = "NO CARGADO";
        $informe_solicitud = "NO CARGADO";
        $acta_inicio = "NO CARGADO";
        $liquidacion_gastos = "NO CARGADO";


        //utilizo el resultado de los pagos notariales para hallar la ultima resolución
        foreach ($gastos_notariales as $gasto_notarial) {

            $gasto_predio = $expenseProperty->find('first', array('order' => array('ExpenseProperty.id' => 'DESC'), 'conditions' => array('ExpenseProperty.proyect_id' => $gasto_notarial['ExpenseNotarial']['proyect_id']), 'fields' => array('ExpenseProperty.id', 'ExpenseProperty.acta_entrega', 'ExpenseProperty.folio_matricula', 'ExpenseProperty.autorizacion_vendedor', 'ExpenseProperty.valor')));
            $proyecto_productivo = $proyectCheckList->find('first', array('order' => array('ProyectCheckList.id' => 'DESC'), 'conditions' => array('ProyectCheckList.expense_notarial_id' => $gasto_notarial['ExpenseNotarial']['id']), 'fields' => array('ProyectCheckList.ruta_informe', 'ProyectCheckList.ruta_acta', 'ProyectCheckList.ruta_liquidacion', 'ProyectCheckList.saldo', 'ProyectCheckList.valor')));

            if ($gasto_notarial['ExpenseNotarial']['acta_notificacion'] == 1) {
                $acta_notificacion = "CARGADO";
            }

            if ($gasto_notarial['ExpenseNotarial']['autorizaciones_especiales'] == 1) {
                $autorizaciones_especiales = "CARGADO";
            }

            if ($gasto_notarial['ExpenseNotarial']['anexos'] == 1) {
                $anexos = "CARGADO";
            }

            if ($gasto_predio['ExpenseProperty']['acta_entrega'] == 1) {
                $acta_entrega = "CARGADO";
            }

            if ($gasto_predio['ExpenseProperty']['folio_matricula'] == 1) {
                $folio_matricula = "CARGADO";
            }

            if ($gasto_predio['ExpenseProperty']['autorizacion_vendedor'] == 1) {
                $autorizacion_vendedor = "CARGADO";
            }

            if ($proyecto_productivo['ProyectCheckList']['ruta_informe'] != '' and !is_null($proyecto_productivo['ProyectCheckList']['ruta_informe'])) {
                $informe_solicitud = "CARGADO";
            }

            if ($proyecto_productivo['ProyectCheckList']['ruta_acta'] != '' and !is_null($proyecto_productivo['ProyectCheckList']['ruta_acta'])) {
                $acta_inicio = "CARGADO";
            }

            if ($proyecto_productivo['ProyectCheckList']['ruta_liquidacion'] != '' and !is_null($proyecto_productivo['ProyectCheckList']['ruta_liquidacion'])) {
                $liquidacion_gastos = "CARGADO";
            }

            $fecha_solicitud_desembolso_notarial = $pago->field('Payment.fecha_solicitud_desembolso', array('Payment.proyect_id' => $gasto_notarial['Proyect']['id'], 'Payment.tipo' => 'GASTOS NOTARIALES'));
            $fecha_pago_notarial = $pago->field('Payment.fecha_pago_real', array('Payment.proyect_id' => $gasto_notarial['Proyect']['id'], 'Payment.tipo' => 'GASTOS NOTARIALES'));
            $fecha_solicitud_desembolso_predio = $pago->field('Payment.fecha_solicitud_desembolso', array('Payment.proyect_id' => $gasto_notarial['Proyect']['id'], 'Payment.tipo' => 'DESEMBOLSO PREDIO'));
            $fecha_pago_predio = $pago->field('Payment.fecha_pago_real', array('Payment.proyect_id' => $gasto_notarial['Proyect']['id'], 'Payment.tipo' => 'DESEMBOLSO PREDIO'));
            $fecha_solicitud_desembolso_ppt = $pago->field('Payment.fecha_solicitud_desembolso', array('Payment.proyect_id' => $gasto_notarial['Proyect']['id'], 'Payment.tipo' => 'PROYECTO PRODUCTIVO'));
            $fecha_pago__ppt = $pago->field('Payment.fecha_pago_real', array('Payment.proyect_id' => $gasto_notarial['Proyect']['id'], 'Payment.tipo' => 'PROYECTO PRODUCTIVO'));

            $row = array(
                $gasto_notarial['Proyect']['codigo'],
                number_format($gasto_notarial['ExpenseNotarial']['valor'], 2, ',', '.'),
                $acta_notificacion,
                $autorizaciones_especiales,
                $anexos,
                $fecha_solicitud_desembolso_notarial,
                $fecha_pago_notarial,
                number_format($gasto_predio['ExpenseProperty']['valor'], 2, ',', '.'),
                $acta_entrega,
                $folio_matricula,
                $autorizacion_vendedor,
                $fecha_solicitud_desembolso_predio,
                $fecha_pago_predio,
                number_format($proyecto_productivo['ProyectCheckList']['valor'], 2, ',', '.'),
                number_format($proyecto_productivo['ProyectCheckList']['saldo'], 2, ',', '.'),
                number_format(($proyecto_productivo['ProyectCheckList']['valor'] - $proyecto_productivo['ProyectCheckList']['saldo']), 2, ',', '.'),
                $informe_solicitud,
                $acta_inicio,
                $liquidacion_gastos,
                $fecha_solicitud_desembolso_ppt,
                $fecha_pago__ppt,
            );
            fputcsv($csv_file, $row, ';', '"');
        }

        //se imprime el archivo.
        fclose($csv_file);
    }

    public function qualify_view($id) {
        App::Import('Model', 'User');
        App::Import('Model', 'BankAccount');
        App::Import('Model', 'Proyect');

        $this->layout = "ajax";
        $this->ExpenseProperty->recursive = -1;
        $this->data = $this->ExpenseProperty->find('first', array('conditions' => array('ExpenseProperty.id' => $id), 'fields' => array('ExpenseProperty.id', 'ExpenseProperty.proyect_id', 'ExpenseProperty.calificacion_total', 'ExpenseProperty.observacion_total', 'ExpenseProperty.calificacion_cuenta', 'ExpenseProperty.calificacion_cuenta', 'ExpenseProperty.observacion_cuenta', 'ExpenseProperty.acta_entrega_calificacion', 'ExpenseProperty.acta_entrega_observacion', 'ExpenseProperty.folio_matricula_calificacion', 'ExpenseProperty.folio_matricula_observacion', 'ExpenseProperty.autorizacion_vendedor_calificacion', 'ExpenseProperty.autorizacion_vendedor_observacion', 'ExpenseProperty.autorizacion_vendedor_observacion')));

        //el id de la persona que reviso
        $user_id = $this->ExpenseProperty->field('reviso', array('ExpenseProperty.id' => $id));
        $usuario = new User();
        $usuario->recursive = -1;
        $datos_usuario = $usuario->find('first', array('conditions' => array('User.id' => $user_id), 'fields' => array('User.email', 'User.nombre', 'User.primer_apellido', 'User.segundo_apellido')));
        $this->set('datos_usuario', $datos_usuario);

        $cuentas = new BankAccount();
        $cuentas->recursive = -1;
        $cuentas1 = $cuentas->find('all', array('conditions' => array('BankAccount.proyect_id' => $this->data['ExpenseProperty']['proyect_id'], 'BankAccount.tipo_titular' => 'Propietario'), 'fields' => array('BankAccount.nombre_titular', 'BankAccount.documento_titular', 'BankAccount.adjunto')));
        $this->set('cuentas', $cuentas1);

        $proyecto = new Proyect();
        $codigo = $proyecto->field('Proyect.codigo', array('Proyect.id' => $this->data['ExpenseProperty']['proyect_id']));
        $this->set('codigo', $codigo);
    }

    function send_mail($expense_id, $tipo) {
        App::import('Vendor', 'ClassPhpmailer', array('file' => 'phpmailer/class.phpmailer.php'));
        $this->layout = "ajax";
        $gasto = $this->ExpenseProperty->find('first', array('order' => 'ExpenseProperty.id DESC', 'conditions' => array('ExpenseProperty.id' => $expense_id), 'fields' => array('ExpenseProperty.acta_entrega_calificacion', 'ExpenseProperty.acta_entrega_observacion', 'ExpenseProperty.autorizacion_vendedor_calificacion', 'ExpenseProperty.autorizacion_vendedor_observacion', 'ExpenseProperty.folio_matricula_calificacion', 'ExpenseProperty.folio_matricula_observacion', 'ExpenseProperty.calificacion_cuenta', 'ExpenseProperty.observacion_cuenta', 'ExpenseProperty.reviso', 'ExpenseProperty.observacion_total', 'ExpenseProperty.calificacion_total', 'ExpenseProperty.user_id', 'ExpenseProperty.reviso', 'ExpenseProperty.proyect_id')));
        $cal_cuenta = $gasto['ExpenseProperty']['calificacion_cuenta'];
        $obs_cuenta = $gasto['ExpenseProperty']['observacion_cuenta'];
        $cal_acta = $gasto['ExpenseProperty']['acta_entrega_calificacion'];
        $obs_acta = $gasto['ExpenseProperty']['acta_entrega_observacion'];
        $cal_aut = $gasto['ExpenseProperty']['autorizacion_vendedor_calificacion'];
        $obs_aut = $gasto['ExpenseProperty']['autorizacion_vendedor_observacion'];
        $cal_folio = $gasto['ExpenseProperty']['folio_matricula_calificacion'];
        $obs_folio = $gasto['ExpenseProperty']['folio_matricula_calificacion'];

        $cal_total = $gasto['ExpenseProperty']['calificacion_total'];
        $obs_total = $gasto['ExpenseProperty']['observacion_total'];

        $body = "<table border='1' width='80%'  cellspacing='5' cellpadding='5'>
    <tbody>
        <tr>
            <td>Cuenta Bancaria calificación</td>
            <td>
            $cal_cuenta
            </td>
        </tr>
        <tr>
            <td>Cuenta Bancaria observación</td>
            <td>
             $obs_cuenta
            </td>
        </tr>
        <tr>
            <td>Acta entrega calificación</td>
            <td>
            $cal_acta
            </td>
        </tr>
        <tr>
            <td>Acta entrega  observación</td>
            <td>
            $obs_acta
            </td>
        </tr>
        <tr>
            <td>Folio matrícula inmobiliaria calificación</td>
            <td>
            $cal_folio
            </td>
        </tr>
        <tr>
            <td>Folio matrícula inmobiliaria concepto</td>
            <td>
            $obs_folio
            </td>
        </tr>
       <tr>
            <td> Calificación autorización especial vendedor</td>
            <td>
            $cal_aut
            </td>
        </tr>
        <tr>
            <td>Observación  autorización especial vendedor</td>
            <td>  $obs_aut</td>
        </tr>
        <tr>
            <td> Calificación total</td>
            <td>
            $cal_total
            </td>
        </tr>
        <tr>
            <td>Observación  total</td>
            <td>  $obs_total</td>
        </tr>
    </tbody>
</table>";

//Buscando usuario responsable

        $responsable = $this->ExpenseProperty->User->find('first', array('recursive' => -1, 'conditions' => array('User.id' => $gasto['ExpenseProperty']['user_id']), 'fields' => array('User.email', 'User.nombre', 'User.primer_apellido')));
        $revisor = $this->ExpenseProperty->User->find('first', array('recursive' => -1, 'conditions' => array('User.id' => $gasto['ExpenseProperty']['reviso']), 'fields' => array('User.email', 'User.nombre', 'User.primer_apellido')));
//director territorial
        $body.="<p>Encargado de adjuntar documentos: " . $responsable['User']['nombre'] . " " . $responsable['User']['primer_apellido'] . " " . $responsable['User']['email'] . "</p>";
        $body.="<p>Encargado de la revisión de documentos: " . $revisor['User']['nombre'] . " " . $revisor['User']['primer_apellido'] . " " . $revisor['User']['email'] . "</p>";
        $proyecto = $this->ExpenseProperty->Proyect->find('first', array('recursive' => -1, 'joins' => array(array('table' => 'branches', 'alias' => 'Branch', 'type' => 'left', 'conditions' => array('Branch.id=Proyect.branch_id'))), 'conditions' => array('Proyect.id' => $gasto['ExpenseProperty']['proyect_id']), 'fields' => array('Proyect.codigo', 'Branch.email')));

        $mail = new PHPMailer();

//Luego tenemos que iniciar la validación por SMTP: 
        $mail->IsSMTP();
        $mail->SMTPAuth = true;
        $mail->SMTPDebug = 1;
        $mail->Host = "ssl://smtp.gmail.com"; // SMTP a utilizar. Por ej. smtp.elserver.com 
        $mail->Username = "sitrural@gmail.com"; // Correo completo a utilizar 
        $mail->Password = "laropavieja.net.co"; // Contraseña 
        $mail->Port = 465; // Puerto a utilizar 
//Con estas pocas líneas iniciamos una conexión con el SMTP. Lo que ahora deberíamos hacer, es configurar el mensaje a enviar, el //From, etc. 
        $mail->From = "sitrural@gmail.com"; // Desde donde enviamos (Para mostrar) 
        $mail->FromName = "Soporte aplicativo tierras";

//Estas dos líneas, cumplirían la función de encabezado (En mail() usado de esta forma: “From: Nombre <correo@dominio.com>”) de //correo. 
//$mail->AddAddress('wilavel@gmail.com');// Esta es la dirección a donde enviamos 

        if ($tipo == 0) {
            $mail->AddAddress($responsable['User']['email']);
            $mail->AddAddress($proyecto['Branch']['email']);
            $mail->AddAddress($revisor['User']['email']);
            $mail->AddAddress('mrodriguez@incoder.gov.co');
            $mail->AddAddress('nneva@incoder.gov.co');
            $mail->AddAddress('jagudelo@incoder.gov.co');
        } else if ($tipo == 1) {
            $mail->AddAddress($responsable['User']['email']);
            $mail->AddAddress($proyecto['Branch']['email']);
            $mail->AddAddress($revisor['User']['email']);
            $mail->AddAddress('mrodriguez@incoder.gov.co');
            $mail->AddAddress('nneva@incoder.gov.co');
            $mail->AddAddress('cmmartinez@incoder.gov.co');
            $mail->AddAddress('csanchez@incoder.gov.co');
            $mail->AddAddress('jagudelo@incoder.gov.co');
        }
        $mail->IsHTML(true);
//$mail->IsHTML(true); // El correo se envía como HTML 
        $mail->Subject = utf8_decode("RESULTADO REVISIÓN DE DOCUMENTOS PARA PAGO DE PREDIOS. " . $proyecto['Proyect']['codigo'] . " "); // Este es el titulo del email. 

        $mail->Body = $body; // Mensaje a enviar 
//$mail->SMTPDebug = 1;

        $exito = $mail->Send(); // Envía el correo. 
//También podríamos agregar simples verificaciones para saber si se envió: 
        if ($exito) {
            $this->Session->setFlash("Sus datos fueron enviados correctamente ");
        } else {
            $this->Session->setFlash("Error :  " . $mail->ErrorInfo);
        }
    }

    function print_certification($expense_id) {
        $this->layout = "pdf";
        $pago_predios = $this->ExpenseProperty->find('first', array('conditions' => array('ExpenseProperty.id' => $expense_id), 'fields' => array('ExpenseProperty.id', 'ExpenseProperty.valor', 'ExpenseProperty.proyect_id', 'ExpenseProperty.calificacion_total')));
        $this->set('pago_predios', $pago_predios);
        $this->set('proyecto', $this->ExpenseProperty->Proyect->find('first', array('recursive' => 0, 'conditions' => array('Proyect.id' => $pago_predios['ExpenseProperty']['proyect_id']), 'fields' => array('Proyect.codigo', 'Call.nombre'))));
        App::Import('model', 'Resolution');
        $Resolution = new Resolution();
        $resolucion = $Resolution->find('first', array('recursive' => -1, 'conditions' => array('Resolution.proyect_id' => $pago_predios['ExpenseProperty']['proyect_id']), 'fields' => array('Resolution.fecha', 'Resolution.numero'), 'order' => array('Resolution.id DESC')));
        $this->set('resolucion', $resolucion);
        App::Import('model', 'BankAccount');
        $BankAccount = new BankAccount();
        $this->set('cuentas', $BankAccount->find('all', array('recursive' => -1, 'conditions' => array('BankAccount.expense_property_id' => $expense_id), 'fields' => array('BankAccount.nombre_banco', 'BankAccount.valor', 'BankAccount.numero_cuenta', 'BankAccount.sucursal', 'BankAccount.tipo_cuenta', 'BankAccount.nombre_titular', 'BankAccount.documento_titular'))));
    }

}

?>
